//
//  Spadger.swift
//  QingLiuSwift
//
//  Created by xyanl on 2024/11/1.
//  Copyright © 2024 考拉🐨. All rights reserved.
//

import UIKit
import Foundation

/// Spadger 兼容类型的包装器。这种类型为 Spadger 中的便利方法提供了一个扩展点。
public struct Spadger<Base> {
    let base: Base
    init(_ base: Base) {
        self.base = base
    }
}

/// 表示与Spadger兼容的对象类型。您可以使用‘ sg ’属性在Spadger的命名空间中获取一个值。
public protocol SpadgerCompatible {}

/// 表示与Spadger兼容的值类型。您可以使用‘ sg ’属性在Spadger的命名空间中获取一个值。
//public protocol SpadgerCompatibleValue {}

public extension SpadgerCompatible {
    /// Gets a namespace holder for Spadger compatible types.
    static var sg: Spadger<Self>.Type {
        get { Spadger<Self>.self }
        set {}
    }
    
    var sg: Spadger<Self> {
        get { Spadger(self) }
        set {}
    }
}

/// 定义属性协议
internal protocol SpadgerPropertyCompatible {
  
    /// Extended type
    associatedtype T
    
    ///Alias for callback function
    typealias SwiftCallBack = ((T?) -> Void)
    
    ///Define the calculated properties of the closure type
    var swiftCallBack: SwiftCallBack?  { get set }
}

